package com.ruoyi.project.modules.product.service.impl;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.project.modules.productVersionObejct.domain.ProductVersionObejct;
import com.ruoyi.project.modules.productVersionObejct.mapper.ProductVersionObejctMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.modules.product.mapper.ProductInfoMapper;
import com.ruoyi.project.modules.product.domain.ProductInfo;
import com.ruoyi.project.modules.product.service.IProductInfoService;
import com.ruoyi.common.core.text.Convert;

import javax.annotation.Resource;

/**
 * 产品信息Service业务层处理
 *
 * @author smallrain
 * @date 2021-10-28
 */
@Service
public class ProductInfoServiceImpl implements IProductInfoService {
    @Autowired
    private ProductInfoMapper productInfoMapper;

    /**
     * 查询产品信息
     *
     * @param id 产品信息主键
     * @return 产品信息
     */
    @Override
    public ProductInfo selectProductInfoById(Long id) {
        return productInfoMapper.selectProductInfoById(id);
    }

    /**
     * 查询产品信息列表
     *
     * @param productInfo 产品信息
     * @return 产品信息
     */
    @Override
    public List<ProductInfo> selectProductInfoList(ProductInfo productInfo) {
        return productInfoMapper.selectProductInfoList(productInfo);
    }

    /**
     * 新增产品信息
     *
     * @param productInfo 产品信息
     * @return 结果
     */
    @Override
    public int insertProductInfo(ProductInfo productInfo) {
        productInfo.setCreateBy(ShiroUtils.getLoginName());
        productInfo.setCreateTime(DateUtils.getNowDate());
        int i = productInfoMapper.insertProductInfo(productInfo);
        insertProductVersionObejct(productInfo.getId(), productInfo.getInterfaceIds());
        return i;
    }

    @Resource
    private ProductVersionObejctMapper productVersionObejctMapper;

    /**
     * 修改产品信息
     *
     * @param productInfo 产品信息
     * @return 结果
     */
    @Override
    public int updateProductInfo(ProductInfo productInfo) {
        productInfo.setUpdateBy(ShiroUtils.getLoginName());
        productInfo.setUpdateTime(DateUtils.getNowDate());
        productVersionObejctMapper.remove(Arrays.asList(productInfo.getId()), "5");
        insertProductVersionObejct(productInfo.getId(), productInfo.getInterfaceIds());
        return productInfoMapper.updateProductInfo(productInfo);
    }

    private void insertProductVersionObejct(Long id, List<Long> interfaceIds) {
        if (CollectionUtil.isNotEmpty(interfaceIds)) {
            List<ProductVersionObejct> productVersionObejcts = new ArrayList<>();
            for (Long interfaceId : interfaceIds) {
                ProductVersionObejct productVersionObejct = new ProductVersionObejct();
                productVersionObejct.setTableProductVersionId(id);
                productVersionObejct.setObjectType("5");
                productVersionObejct.setObjectId(interfaceId);
                productVersionObejcts.add(productVersionObejct);
            }
            productVersionObejctMapper.batchSave(productVersionObejcts);

        }
    }

    /**
     * 批量删除产品信息
     *
     * @param ids 需要删除的产品信息主键
     * @return 结果
     */
    @Override
    public int deleteProductInfoByIds(String ids) {
        this.productVersionObejctMapper.remove(Convert.toLongList(ids), "5");
        return productInfoMapper.deleteProductInfoByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除产品信息信息
     *
     * @param id 产品信息主键
     * @return 结果
     */
    @Override
    public int deleteProductInfoById(Long id) {
        return productInfoMapper.deleteProductInfoById(id);
    }

    @Override
    public List<ProductInfo> selectProductVersionList(Long interfaceId) {
        return productInfoMapper.selectProductVersionList(interfaceId);
    }
}
